// api.js - API 配置和请求封装

// API配置 - 根据实际后端调整
const API_BASE_URL = 'http://60.205.2.196:8001';

// 可能的路径前缀（根据实际情况调整）
// 方案1: 无前缀 (当前)
// 方案2: /api 前缀
const API_PREFIX = '/api';
// 方案3: 其他前缀
// const API_PREFIX = '';

/**
 * 封装 wx.request
 * @param {string} url - 接口路径
 * @param {string} method - 请求方法
 * @param {object} data - 请求数据
 * @param {boolean} needAuth - 是否需要认证
 */
function request(url, method = 'GET', data = {}, needAuth = true) {
  return new Promise((resolve, reject) => {
    const header = {
      'Content-Type': 'application/json'
    };

    // 手动管理 Session Cookie
    if (needAuth) {
      const sessionId = wx.getStorageSync('JSESSIONID');
      if (sessionId) {
        // 在 Cookie 头中携带 JSESSIONID
        header['Cookie'] = `JSESSIONID=${sessionId}`;
        console.log('携带Session:', sessionId);
      } else {
        console.warn('未找到JSESSIONID，可能需要重新登录');
      }
    }

    // 构建完整URL
    let fullUrl = API_BASE_URL + API_PREFIX;
    if (url.startsWith('/')) {
      fullUrl += url;
    } else {
      fullUrl += '/' + url;
    }

    console.log('API请求:', method, fullUrl, data);
    console.log('请求头:', header);

    wx.request({
      url: fullUrl,
      method: method,
      data: data,
      header: header,
      success: (res) => {
        console.log('API响应:', res);
        console.log('响应Cookie:', res.cookies);
        
        // 保存服务器返回的 JSESSIONID
        if (res.cookies && res.cookies.length > 0) {
          res.cookies.forEach(cookie => {
            if (cookie.startsWith('JSESSIONID=')) {
              const sessionId = cookie.split(';')[0].split('=')[1];
              wx.setStorageSync('JSESSIONID', sessionId);
              console.log('保存JSESSIONID:', sessionId);
            }
          });
        }
        
        // 根据后端返回的状态码判断
        if (res.statusCode === 200) {
          // 后端成功状态码可能是 0, 1, 或 200
          if (res.data.code === 0 || res.data.code === 1 || res.data.code === 200) {
            resolve(res.data);
          } else {
            reject({
              code: res.data.code,
              msg: res.data.msg || res.data.message || '请求失败'
            });
          }
        } else if (res.statusCode === 404) {
          reject({
            code: 404,
            msg: '接口不存在，请检查API地址和路径是否正确\n' +
                 '尝试的URL: ' + fullUrl + '\n' +
                 '可能需要修改 API_PREFIX 或检查后端路由配置'
          });
        } else if (res.statusCode === 401) {
          reject({
            code: 401,
            msg: '未授权，请重新登录'
          });
        } else {
          reject({
            code: res.statusCode,
            msg: `请求失败 (${res.statusCode})`
          });
        }
      },
      fail: (err) => {
        console.error('API请求失败:', err);
        reject({
          code: -1,
          msg: '网络请求失败，请检查网络连接',
          error: err
        });
      }
    });
  });
}

// ==================== 用户相关接口 ====================

/**
 * 用户登录
 * @param {string} username - 学号
 * @param {string} password - 密码
 * @param {string} userType - 用户类型 "1"=学生
 */
export function login(username, password, userType = "1") {
  return request('user/login', 'POST', {
    username,
    password,
    userType
  }, false);
}

/**
 * 获取个人信息
 */
export function getStudentInfo() {
  return request('/student/info', 'GET');
}

/**
 * 更新个人信息
 * @param {object} data - 个人信息对象
 */
export function updateStudentInfo(data) {
  return request('/student/info', 'PUT', data);
}

// ==================== 课程相关接口 ====================

/**
 * 获取选修课程列表
 * @param {number} page - 页码
 */
export function getCourseSelectList(page = 1) {
  return request(`/student/course/select/page/${page}`, 'GET');
}

/**
 * 选课
 * @param {number} courseId - 课程ID
 */
export function selectCourse(courseId) {
  return request(`/student/course/select/${courseId}`, 'POST');
}

/**
 * 获取学生已选课程列表
 */
export function getMyCourseList() {
  return request('/student/course/list', 'GET');
}

/**
 * 退选课程
 * @param {number} courseId - 课程ID
 */
export function dropCourse(courseId) {
  return request(`/student/course/${courseId}`, 'DELETE');
}

/**
 * 获取课表
 */
export function getTimetable() {
  return request('/student/timetable', 'GET');
}

// ==================== 导出默认对象 ====================
export default {
  request,
  login,
  getStudentInfo,
  updateStudentInfo,
  getCourseSelectList,
  selectCourse,
  getMyCourseList,
  dropCourse,
  getTimetable
};
